package smallfrench.moteur.biblio;

import java.util.Calendar;
import java.util.HashMap;

import smallfrench.moteur.biblio.err.ExceptionInterruption;
import smallfrench.moteur.interp.RObjet;

public final class RTempsMethodes {

	public final HashMap<String, RObjet> map = new HashMap<String, RObjet>();

	public static final RTempsMethodes SINGLETON = new RTempsMethodes();

	private RTempsMethodes() {
		map.put("pause", pause);
		map.put("heure", heure);
	}

	/**
	 * Pause de quelques millisecondes
	 */
	private final RFonction pause = new RFonction () {
		@Override
		public RObjet appeler(RObjet oMoi, RObjet[] args) {
			if (args.length == 0)
				return null;
			RObjet arg = args[0];
			if (!(arg instanceof REntier))
				return null;
			REntier millis = (REntier)arg;
			try {
				Thread.sleep(millis.valeur);
			} catch (InterruptedException e) {
				throw ExceptionInterruption.nouvelleException();
			}
			return null;
		}
	};
	private final RFonction heure = new RFonction () {
		@Override
		public RObjet appeler(RObjet oMoi, RObjet[] args) {
			int t = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
			return new REntier(t);
		}
	};

	//	minute(new RFonctionNative () {
	//		@Override
	//		public RObjet appeler(RObjet oMoi, RObjet[] args)
	//				throws RThrowable {
	//			int t = Calendar.getInstance().get(Calendar.MINUTE);
	//			return new REntier(t);
	//		}
	//	}),
	//	seconde(new RFonctionNative () {
	//		@Override
	//		public RObjet appeler(RObjet oMoi, RObjet[] args)
	//				throws RThrowable {
	//			int t = Calendar.getInstance().get(Calendar.SECOND);
	//			return new REntier(t);
	//		}
	//	}),
	//	milliseconde(new RFonctionNative () {
	//		@Override
	//		public RObjet appeler(RObjet oMoi, RObjet[] args)
	//				throws RThrowable {
	//			int t = Calendar.getInstance().get(Calendar.MILLISECOND);
	//			return new REntier(t);
	//		}
	//	}),
	//	millisecondesDepuisMinuit(new RFonctionNative () {
	//		@Override
	//		public RObjet appeler(RObjet oMoi, RObjet[] args)
	//				throws RThrowable {
	//			int t = Calendar.getInstance().get(Calendar.MILLISECOND);
	//			return new REntier(t);
	//		}
	//	}),

}
